home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / tcclib.exe / lha / SCANDIR.C < prev    next >
C/C++ Source or Header  |  1989-07-18  |  1KB  |  64 lines

  1. #include <stdio.h>
  2. #include <dir.h>
  3. #include <string.h>
  4.  
  5. typedef struct {
  6.              char Name[9];
  7.              char Ext[4];
  8.              char Attribute;
  9.     unsigned int  Date;
  10.     unsigned int  Time;
  11.     unsigned long Size;
  12.              int  Tag;
  13. } FileStruc;
  14.  
  15. int ScdirDone;
  16.  
  17. FileStruc *XScanDir( char *Mask, int Type );
  18.  
  19. FileStruc *ScanDir( char *Mask, int Type )
  20. {
  21.     static char OldMask[80] = {"\0\0"};
  22.  
  23.     if ( 0 != stricmp( Mask, OldMask ) ) {
  24.         strcpy( OldMask, Mask );
  25.         ScdirDone = 1;
  26.     }
  27.     return( XScanDir( Mask, Type ) );
  28. }
  29.  
  30. FileStruc *XScanDir( char *Mask, int Type )
  31. {
  32.     static FileStruc FS;
  33.     register FileStruc *fp=&FS;
  34.     register char *cp;
  35.     static struct ffblk ffblkx;
  36.  
  37. Rescan:
  38.     if ( ScdirDone )
  39.         ScdirDone = findfirst( Mask, &ffblkx, Type );
  40.     else
  41.         ScdirDone = findnext ( &ffblkx );
  42.  
  43.     if ( ScdirDone )
  44.         return( NULL );
  45.  
  46.     if ( ffblkx.ff_name[0] == '.' ) goto Rescan;
  47.  
  48.     memset( fp, 0, sizeof( FileStruc ) );
  49.  
  50.     if ( ( cp = strchr( ffblkx.ff_name, '.' ) ) != NULL ) {
  51.         *cp = 0;
  52.         cp++;
  53.         strcpy( fp->Ext, cp );
  54.     }
  55.     strcpy( fp->Name, ffblkx.ff_name );
  56.     fp->Size      = ffblkx.ff_fsize;
  57.     fp->Date      = ffblkx.ff_fdate;
  58.     fp->Time      = ffblkx.ff_ftime;
  59.     fp->Attribute = ffblkx.ff_attrib;
  60.     fp->Tag       = 32;
  61.  
  62.     return( fp );
  63. }
  64.